home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Precision Software Appli…tions Silver Collection 3
/
Precision Software Applications Silver Collection Volume Three (PSM) (1993).iso
/
music2
/
sds_doc.arj
/
SMPLDP.TXT
< prev
Wrap
Text File
|
1993-02-25
|
7KB
|
175 lines
SAMPLE DUMP STANDARD
A standard has been developed for sampler data dumps. It has been
designed to work as an open or closed loop system. The closed loop
system implements handshaking to improve speed and error recovery.
This also accomodates machines that may need more time to process
incoming data. The open loop system may be desired by those wishing
to implement a simplified version with no handshaking.
The basic messages are Dump Request, ACK, NAK, Wait, Cancel, Dump
Header, and Data Packets. These messages are described in detail
below. The data formats are given in hexidecimal.
Dump Request
F0 7E cc 03 ss ss F7
cc = channel number
ss ss = requested sample, LSB first
Upon receiving this message, the sampler should check to see if the
requested sample number falls in a legal range. If it is, the sample
is dumped to the requesting master following the procedure outlined
below. If it is not within a legal range, the message should be
ignored.
ACK
F0 7E cc 7F pp F7
cc = channel number
pp = packet number
This is the first handshaking flag. It means "Last data packet was
received correctly. Start sending the next one." The packet number
represents the packet being acknowledged as correct.
NAK
F0 7E cc 7E pp F7
cc = channel number
pp = packet number
This is the second handshaking flag. It means "Last data packet was
received incorrectly. Please resend." The packet number represents
the packet being rejected.
Cancel
F0 7E cc 7D pp F7
cc = channel number
pp = packet number
This is the third handshaking flag. It means "Abort dump." The
packet number represents the packet on which the abort takes place.
Wait
F0 7E cc 7C pp F7
cc = channel number
pp = packet number
This is the fourth handshaking flag. It means "Do not send any more
packets until told to do otherwise." This is important for systems in
which the receiver (such as a computer) may need to perform other
operations (such as disk access) before receiving the remainder of the
dump. An ACK will continue the dump while a Cancel will abort the
dump.
Dump Header
F0 7E cc 01 ss ss ee ff ff ff gg gg gg hh hh hh ii ii ii jj F7
cc = channel number
ss ss = sample number (LSB first)
ee = sample format (# of significant bits from 8-28)
ff ff ff = sample period (1/sample rate) in nanoseconds (LSB
first)
gg gg gg = sample length in words (LSB first)
hh hh hh = sustain loop start point word number (LSB first)
ii ii ii = sustain loop end point word number (LSB first)
jj = loop type (00 = forward only, 01 = backward/forward)
Data Packet
F0 7E cc 02 kk <120 bytes> ll F7
cc = channel number
kk = running packet count (0-127)
ll = checksum (XOR of 7E cc 02 kk <120 bytes>)
The total size of a data packet is 127 bytes. This is to prevent
MIDI input buffer overflow in machines that may want to receive an
entire message before processing it. 128 bytes, or 1/2 page of
memory, is considered the smallest reasonable buffer for modern MIDI
instruments.
Once a dump has been requested either from the front panel or over
MIDI, the dump header is sent. After sending the header, the master
must time out for at least two seconds, allowing the receiver to
decide if it will accept the dump (enough memory, etc.). If the
master receives a Cancel, it should abort the dump immediately. If it
receives an ACK, it will start sending data packets. If it receives a
Wait, it will pause indefinitely until another message is received.
If nothing is received within the timeout, the master will assume an
open loop and begin sending packets.
A data packet consists of it's own header, a packet number, 120 data
bytes, a checksum, and an End Of Exclusive (EOX). The packet number
starts at 00 and increments with each new packet, resetting to 00
after it reaches 7FH. This is used by the receiver to distinguish
between a new data packet and one being resent. This number is
followed by 120 bytes of data which form 30, 40, or 60 words (MSB
first) depending on the sample format.
Each data byte consists of 7 bits. If the sample format is 8-14 bit,
two bytes form a word. Sample formats of 15-21 bits require three
bytes/word (yielding 40 words/packet). Sample formats of 22-28 bits
require four bytes/word (yielding 30 words/packet). Information is
left-justified within the 7-bit bytes and unused bits are filled in
with zeros. For example, the sample word FFFH would be sent as
01111111B 01111100B. The word FFFH happens to represent a full
positive value (000H represents full negative). The checksum is the
XOR of 7E <channel> 02 <packet number> <120 bytes>.
When a sampler is receiving a data dump, it should keep a running
checksum during reception. If the checksums match, it sends an ACK
and wait for the next packet. If the checksums do not match, it sends
a NAK and waits for the next packet. If the next packet number does
not match the previous one and the sampler has no facility for
receiving packets out of sequence, it should ignore the error and
continue as if the checksum had matched.
When a sampler is sending a data dump, it should send a packet and
watch its MIDI In port. If an ACK is received, it sends the next
packet. If a NAK is received and the packet number matches that of
the previous packet, it resends that packet. If the packet numbers do
not match and the sampler has no facility to send packets out of
sequence, it should ignore the NAK. If a Wait is received, the
sampler should watch its MIDI IN port indefinitely for another message
and process it like a normal ACK, NAK, Cancel, or illegal message
(which would usually abort the dump). If nothing is received within
20 milliseconds, the sampler can assume an open loop and send the next
packet.
The packet numbers are included in the handshaking flags (ACK, NAK,
Cancel, Wait) in order to accomodate future machines that might have
the intelligence to retransmit specific packets after the entire dump
is completed or if synchronization is lost.
This process continues until there are less than 121 bytes to send.
The final data packet will still consist of 120 data bytes regardless
of how many significant bytes actually remain. The unused bytes will
be filled out with zeros. The receiver should receive and handshake
on the last packet. If the receiver's memory becomes full, it should
send a Cancel to the master.
Sample Dump Standard
1